package first

/*
	请实现一个函数，用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样，那么它是对称的。

	例如，二叉树[1,2,2,3,4,4,3] 是对称的。
	但是下面这个[1,2,2,null,3,null,3] 则不是镜像对称的:
	示例 1：

	输入：root = [1,2,2,3,4,4,3]
	输出：true
	示例 2：

	输入：root = [1,2,2,null,3,null,3]
	输出：false

	限制：

	0 <= 节点个数 <= 1000

	来源：力扣（LeetCode）
	链接：https://leetcode-cn.com/problems/dui-cheng-de-er-cha-shu-lcof
	著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
*/
func isSymmetric(root *TreeNode) bool {
	if nil == root {
		return true
	}
	return _isSymmetric(root.Left, root.Right)

}

func _isSymmetric(left *TreeNode, right *TreeNode) bool {
	if left == nil && right == nil {
		return true
	}
	if left == nil {
		return false
	}
	if right == nil {
		return false
	}
	if left.Val != right.Val {
		return false
	}

	return _isSymmetric(left.Left, right.Right) && _isSymmetric(left.Right, right.Left)
}
